package {
	import br.com.ruidobrasil.manterpublicacao.PublicacaoEdicao;
	import br.com.ruidobrasil.manterpublicacao.PublicacaoSelecaoView;
	import br.com.ruidobrasil.util.TratamentoErros;
	import br.com.ruidobrasil.vo.PublicacaoVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class PublicacaoSelecao extends PublicacaoSelecaoView {
		
		private var publicacaoEdicao: PublicacaoEdicao;
		private var listaTiposPublicacao: ArrayCollection;
		private var listaPublicacaoAtiva: ArrayCollection;
		private var listaPublicacoes: ArrayCollection = new ArrayCollection();
		
		public function PublicacaoSelecao() {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			
			include 'br/com/ruidobrasil/util/RegistroVOs.as';
		}
		
		private function init(event: FlexEvent): void {
			
			btnPesquisar.addEventListener(MouseEvent.CLICK, pesquisar);
			btnIncluir.addEventListener(MouseEvent.CLICK, incluir);
			btnAlterar.addEventListener(MouseEvent.CLICK, alterar);
			btnExcluir.addEventListener(MouseEvent.CLICK, alertaExcluir);
			btnFechar.addEventListener(MouseEvent.CLICK, fechar);
			this.addEventListener(CloseEvent.CLOSE, fechar);
			
			rm.obterDadosSelecao.addEventListener(ResultEvent.RESULT, resultObterDadosSelecao);
			rm.obterDadosSelecao.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.pesquisar.addEventListener(ResultEvent.RESULT, resultPesquisar);
			rm.pesquisar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.excluir.addEventListener(ResultEvent.RESULT, resultExcluir);
			rm.excluir.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			limparDados();
			
			rm.obterDadosSelecao();
		}
		
		private function resultObterDadosSelecao(event: ResultEvent): void {
			listaTiposPublicacao = event.result.dados.listaTiposPublicacao;
			
			var objTipoPublicacao: PublicacaoVO = new PublicacaoVO();
			objTipoPublicacao.descTipoPublicacao = "---";
			
			listaTiposPublicacao.addItemAt(objTipoPublicacao, 0);
			
			cbxTipoPublicacao.dataProvider = listaTiposPublicacao;
			
			criarComboPublicacaoAtiva();
		}
		
		private function criarComboPublicacaoAtiva(): void {
			listaPublicacaoAtiva = new ArrayCollection();
			
			var objPublicacao: PublicacaoVO = new PublicacaoVO();
			objPublicacao.bolAtivo = "---";
			listaPublicacaoAtiva.addItemAt(objPublicacao, 0);
			
			var objPubAtiva: PublicacaoVO = new PublicacaoVO();
			objPubAtiva.bolAtivo = "true";
			listaPublicacaoAtiva.addItemAt(objPubAtiva, 1);
			
			var objPubInativa: PublicacaoVO = new PublicacaoVO();
			objPubInativa.bolAtivo = "false";
			listaPublicacaoAtiva.addItemAt(objPubInativa, 2);
			
			cbxPublicacaoAtiva.dataProvider = listaPublicacaoAtiva;
		}
		
		public function pesquisar(event: MouseEvent = null): void {
			
			var publicacao: PublicacaoVO = new PublicacaoVO();
			
			publicacao.tituloPublicacao = txtTitulo.actualText == "" ? null : txtTitulo.actualText;
			
			if (cbxPublicacaoAtiva.selectedIndex != 0) {
				publicacao.bolAtivo = cbxPublicacaoAtiva.selectedItem.bolAtivo;	
			}
			
			if (cbxTipoPublicacao.selectedIndex != 0) {
				publicacao.idTipoPublicacao = cbxTipoPublicacao.selectedItem.idTipoPublicacao;
			}
			
			if (dtCadastro.selectedDate != null) {
				publicacao.dataHoraCadastro = dtCadastro.dataFormatada;	
			}
			
			rm.pesquisar(publicacao);
		}
		
		private function resultPesquisar(event: ResultEvent): void {
			listaPublicacoes = event.result.dados.lista;
			grdDados.dataProvider = listaPublicacoes;
			
			if (listaPublicacoes.length == 0) {
				Alert.show("Nenhuma publicação encontrada com o filtro informado.", "Aviso!");
			}
		}
		
		private function incluir(event: MouseEvent): void {
			publicacaoEdicao = new PublicacaoEdicao(null);
			publicacaoEdicao.telaPai = this;
			PopUpManager.addPopUp(publicacaoEdicao, this, true);
			PopUpManager.centerPopUp(publicacaoEdicao);
			publicacaoEdicao.txtTitulo.setFocus();
		}
		
		private function alterar(event: MouseEvent): void {
			
			if (grdDados.selectedItem != null) {
				
				publicacaoEdicao = new PublicacaoEdicao(grdDados.selectedItem as PublicacaoVO);
				publicacaoEdicao.telaPai = this;
				PopUpManager.addPopUp(publicacaoEdicao, this, true);
				PopUpManager.centerPopUp(publicacaoEdicao);
				
			} else {
				Alert.show("Selecione uma publicação na lista para alterar.", "Aviso!");
			}
		}
		
		private function alertaExcluir(event: MouseEvent): void {
			if (grdDados.selectedItem != null) {
				Alert.yesLabel = "Sim";
                Alert.noLabel = "Não";
				Alert.show("Deseja realmente excluir a publicação selecionada?", "Exclusão", 1|2, this, excluir);
			} else {
				Alert.show("Selecione uma publicação na lista e clique em excluir.", "Aviso!");
			}
		}
		
		private function excluir(event: CloseEvent): void {
			if (event.detail == Alert.YES) {
				var publicacaoExcluido: PublicacaoVO = grdDados.selectedItem as PublicacaoVO;
				rm.excluir(publicacaoExcluido);
			}
		}
		
		private function resultExcluir(result: ResultEvent): void {
			Alert.show("Publicação excluída com sucesso.", "Aviso!");
			pesquisar();
		}
		
		private function fechar(event: Event): void {
			PopUpManager.removePopUp(this);
		}
		
		private function limparDados(): void {
			txtTitulo.actualText = "";
			cbxPublicacaoAtiva.selectedIndex = 0;
			dtCadastro.selectedDate = null;
			
			grdDados.dataProvider = null;
		}
	}
}